package com.creditnet.bmc.platform.service.impl;

import com.creditnet.bmc.common.utils.BuildTree;
import com.creditnet.bmc.platform.dao.DeptDao;
import com.creditnet.bmc.platform.domain.DeptDO;
import com.creditnet.bmc.platform.domain.Tree;
import com.creditnet.bmc.platform.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by bjmaozhengwei on 2018/4/1.
 */
@Service
public class DeptServiceImpl implements DeptService{
        @Autowired
        private DeptDao sysDeptMapper;

        @Override
        public DeptDO get(Long deptId){
            return sysDeptMapper.get(deptId);
        }

        @Override
        public List<DeptDO> list(Map<String, Object> map){
            return sysDeptMapper.list(map);
        }

        @Override
        public int count(Map<String, Object> map){
            return sysDeptMapper.count(map);
        }

        @Override
        public int save(DeptDO sysDept){
            return sysDeptMapper.save(sysDept);
        }

        @Override
        public int update(DeptDO sysDept){
            return sysDeptMapper.update(sysDept);
        }

        @Override
        public int remove(Long deptId){
            return sysDeptMapper.remove(deptId);
        }

        @Override
        public int batchRemove(Long[] deptIds){
            return sysDeptMapper.batchRemove(deptIds);
        }

        @Override
        public Tree<DeptDO> getTree() {
            List<Tree<DeptDO>> trees = new ArrayList<Tree<DeptDO>>();
            List<DeptDO> sysDepts = sysDeptMapper.list(new HashMap<String,Object>(16));
            for (DeptDO sysDept : sysDepts) {
                Tree<DeptDO> tree = new Tree<DeptDO>();
                tree.setId(sysDept.getDeptId().toString());
                tree.setParentId(sysDept.getParentId().toString());
                tree.setText(sysDept.getName());
                Map<String, Object> state = new HashMap<>(16);
                state.put("opened", true);
                tree.setState(state);
                trees.add(tree);
            }
            // 默认顶级菜单为０，根据数据库实际情况调整
            Tree<DeptDO> t = BuildTree.build(trees);
            return t;
        }

        @Override
        public boolean checkDeptHasUser(Long deptId) {
            // TODO Auto-generated method stub
            //查询部门以及此部门的下级部门
            int result = sysDeptMapper.getDeptUserNumber(deptId);
            return result==0?true:false;
        }
}
